package ballena.activities;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.StreamCorruptedException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import ballena.entidades.Comentarios;
import ballena.entidades.Usuario;
import ballena.utiles.Global;
import ballena.utiles.Servlet;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class Noticias extends Activity {
	List<Comentarios> estados = new ArrayList<Comentarios>();
	private ListView lvListaEstados;
	private Button btnActEstado;
	int idUsuario;
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.noticias);

		idUsuario = Global.usuario.getId();
		asociarVariables();
		refreshListItems();
	}

	List<Comentarios> pedirListaEstados(int idUsuario) {
		List<Comentarios> listaEstados = new ArrayList<Comentarios>();
		listaEstados.clear(); // por si las moscas la limpio
		// aqui pido al servlet mi lista de amigos del usuario idUsuarios
		String param[] = { "accion=" + Global.NOTICIAS, "id=" + idUsuario };
		Servlet s = new Servlet(Global.SERVLET, param);
		s.conectar();

		ObjectInputStream in;

		try {
			InputStream ain = s.getInputStream();
			in = new ObjectInputStream(ain);
			// no me hace falta comprobar la lista, o es vacia o tiene contenido
			
			int tamano = (Integer) in.readInt();

			Object[] datos = new Object[6];
			
			for (int cont = 0; cont < tamano; cont++) {
				datos[0] = in.readInt();
				datos[1] = in.readInt();
				datos[2] = in.readUTF();
				datos[3] = in.readUTF();
				datos[4] = in.readUTF();
				datos[5] = "Sin fecha";
				
				listaEstados.add(new Comentarios(datos));
			}

		} catch (StreamCorruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			s.desconectar();
		}

		return listaEstados;
	}
	
	public void asociarVariables() {
		lvListaEstados = (ListView) findViewById(R.id.lvListaEstados);
		btnActEstado = (Button) findViewById(R.id.btnNoticiasActEstado);
		btnActEstado.setOnClickListener(actualizaEstado);
	}

	View.OnClickListener actualizaEstado = new OnClickListener(){
		 public void onClick(View v) 
	        {	finish();
	        	Intent iActEstado = new Intent(Noticias.this, ActualizaEstado.class);
				startActivity(iActEstado);
	        }
	};
	
	static class ViewHolder {
		TextView nombre_emisor;
		TextView apellidos_emisor;
		TextView estadoAct;
	}

	private void refreshListItems() {
		/* Cargo los elementos de la lista */
		estados.clear(); // por si las moscas inicializo la lista
		estados.addAll(pedirListaEstados(idUsuario));
		AdaptadorComentarios adaptador = new AdaptadorComentarios(this);
		/*
		 * Meto cada elemento de la lista en la lista del main de la interfaz
		 * enlazando al adaptador con la lista
		 */
		lvListaEstados.setAdapter(adaptador);
	}

	@SuppressWarnings("rawtypes")
	class AdaptadorComentarios extends ArrayAdapter {

		Activity context;

		@SuppressWarnings("unchecked")
		AdaptadorComentarios(Activity context) {
			super(context, R.layout.item_noticias, estados);
			this.context = context;
		}

		public View getView(final int position, View convertView, ViewGroup parent) {
			View item = convertView;
			ViewHolder holder;

			if (item == null) {
				LayoutInflater inflater = context.getLayoutInflater();
				item = inflater.inflate(R.layout.item_noticias, null);
				/*
				 * Creo el contenedor y lo asocio a sus respectivos elementos de
				 * la vista
				 */
				holder = new ViewHolder();
				holder.nombre_emisor = (TextView) item.findViewById(R.id.tvItemNoticiasNombre);
				holder.apellidos_emisor = (TextView) item.findViewById(R.id.tvItemNoticiasApellidos);
				holder.estadoAct = (TextView) item.findViewById(R.id.tvItemNoticiasEstadoActual);
				item.setTag(holder);
			} else {
				holder = (ViewHolder) item.getTag();
			}

			holder.nombre_emisor.setText(estados.get(position).getNombreEmisor());
			holder.apellidos_emisor.setText(estados.get(position).getApellidosEmisor());
			holder.estadoAct.setText(estados.get(position).getMensaje());
			
			item.setOnClickListener(new View.OnClickListener() {
				public void onClick(View view) {
					irAPerfil(estados.get(position).getIdEmisor(), estados.get(position).getNombreEmisor());
				}
			});
			
			return (item);
		}
	}
	
	//Aqui se hace el intent para ir al perfil.
	void irAPerfil(int idUser, String nombre) {
		finish();
		Intent intent = new Intent(Noticias.this, Perfil.class);

		Bundle bundle = new Bundle();
		bundle.putInt("ID", idUser);
		bundle.putString("NOMBRE", nombre);
		intent.putExtras(bundle);

		startActivity(intent);
		
	}

}
